package com.youxue.teachin.user.repository;

import com.library.rest.vo.ResponseModel;
import com.youxue.teachin.common.vo.ToKenVO;
import com.youxue.teachin.common.vo.UserVO;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.PUT;
import retrofit2.http.Query;
import rx.Observable;

/**
 * 在此写用途
 *
 * @author: zhiwei
 * @date: 2017-10-05 10:14
 * @version: 9.1.0
 */
public interface IUserRepository {
    /**
     * reg:注册发送;
     */
    public static final String CAPTCHA_REQ = "reg";
    /**
     * upd:修改密码/修改手机号;
     */
    public static final String CAPTCHA_UPD = "upd";
    /**
     * bin:手机号绑定;
     */
    public static final String CAPTCHA_BIN = "bin";

    /**
     * 获取验证码
     * @param phone
     * @param type
     * @return
     */
    @POST("/sms")
    Observable<ResponseModel<String>> getCaptcha(@Query("phone") String phone, @Query("sendType") String type);

    /**
     * 注册
     * @param phone
     * @param password
     * @param authCode
     * @param registerSource 不知道啥含义
     * @return
     */
    @POST("/user/register")
    Observable<ResponseModel<UserVO>> createNewUser(
        @Query("phone") String phone,
        @Query("password") String password,
        @Query("authCode") String authCode,
        @Query("registerSource") String registerSource
    );

    /**
     * token方式登录
     *
     * @param phone
     * @param password
     * @return
     */
    @POST("/tokenLogin")
    Observable<ResponseModel<ToKenVO>> login(@Query("loginId") String phone, @Query("password") String password);

    /**
     * 微信登录
     * @param code 授权成功的回传吗
     * @param state 授权是的STATE字符串
     * @param lang 语言
     * @param country 国家
     * @return
     */
    @POST("/weixin/app/login")
    Observable<ResponseModel<ToKenVO>> loginTheed(
        @Query("code") String code,
        @Query("state") String state,
        @Query("lang") String lang,
        @Query("country") String country

    );

    /**
     * 退出登录
     * @return
     */
    @GET("/user/logout")
    Observable<ResponseModel<Void>> loginOut();

    /**
     * 忘记密码（未登录）
     *
     * @param phone
     * @param password
     * @param authcoe
     * @return
     */
    @PUT("/user/forget/password")
    Observable<ResponseModel<Void>> forgetPassword(@Query("phone") String phone,
                                                         @Query("password") String password,
                                                         @Query("authCode") String authcoe);

    /**
     * 修改密码
     *
     * @param password 新密码
     * @param authCode 验证码
     * @return
     */
    @PUT("/user/update/password")
    Observable<ResponseModel<Void>> updatePassword(
        @Query("password") String password,
        @Query("authCode") String authCode);
}

